package com.itheima.service.impl;

import com.itheima.dao.AccountDao;
import com.itheima.service.AccountService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

/**
 * ClassName:AccountServiceImpl
 * Package:com.itheima.service.impl
 * Description:账户的业务层实现类
 * xml注解方法，applicationContext.xml
 * -----------------------------------------------------------------------------
 * <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"
 * scope=""  intit-method="" destroy-method=""/>
 * bean用于创建对象；
 * 和在xml配置文件中写一个bean标签实现功能相同
 * -----------------------------------------------------------------------------
 * component:
 * 作用：把当前类对象存入spring容器中
 * 属性：value指定bean的id
 * ------------------------------------------------------------------------------------------
 * 用于注入数据；
 * 和在xml配置文件中bean标签中写一个<property></property>标签作用相同
 * Autowired：
 *      作用，自动按照类型注入，只要容器中有唯一的bean对象类型和要注入的变量类型匹配，就可注入成功
 *            如果IOC容器中没有任何bean类型和要注入的变量类型匹配，则报错；
 *            如果IOC容器中有多个类型匹配时，报错；
 * Resource
 *      作用，按照bean的id注入，name属性用于指定bean的id
 * -------------------以上属性用于注入bean类型的数据--------------------------------------
 * Value
 *      作用，用于注入基本类型和String类型的数据
 *      属性，value用于指定数据的值，可以使用Spring中的SpEL(Spring中的EL表达式)
 *              SpEL 的写法  ${表达式}
 *
 * 用于改变作用范围；
 * 和在xml配置文件中bean标签中使用scope属性实现功能相同
 * scope
 *      作用，用于指定bean的作用范围
 *      属性，value指定范围的取值，常用singleton、prototype
 *      ---------------------------------------------------------------------
 * 和生命周期有关；
 * 和在xml配置文件中bean标签中使用init-method和destroy-method的作用相同
 * preDestroy用于指定销毁方法
 * postConstruct用于指定初始化方法
 *
 * Date:2020/2/18 23:24
 * User: snow
 */
@Service("accountService")
@Scope("singleton")
public class AccountServiceImpl implements AccountService {

	@Resource(name = "accountDao2")
	private AccountDao accountDao;

	public AccountServiceImpl() {
		System.out.println("对象创建了");
	}

	public void saveAccount() {
		System.out.println("业务层实现类调用调用持久层接口");
		accountDao.saveAccount();
	}
	@PostConstruct
	public void init() {
		System.out.println("初始化方法执行");
	}
	@PreDestroy
	public void destroy() {
		System.out.println("销毁方法执行");
	}
}
